# 多值参数，就是参数个数不确定，必须是下面的写法

def demo2(*args, **kwargs):
    """
    多值函数的嵌套调用
    """
    print(f"demo2{args}")
    print(f"demo2{kwargs}")


def demo1(name, *args, **kwargs):
    """
    name就表示一个位置参数，可以有多个位置参数
    *args：参数名前增加一个 * 可以接收元组，接收范围是 除了前面的位置参数，直到 赋值参数前
    **kwargs：参数名前增加两个 * 可以接收字典，接收范围是 后面所有的赋值参数
    注意：位置参数必须在*args前，*args必须在**kwargs前，否则系统无法区分从而全部读入
    """
    print(name)
    print(args)
    print(type(args))  # <class 'tuple'>
    print(kwargs)
    print(type(kwargs))  # <class 'dict'>

    #将调用本函数是传入的一组数据用于嵌套调用其他的函数
    demo2(*args,**kwargs)


if __name__ == '__main__':
    demo1("张三", 1, 2, 3, 4, age=19, gander="男生")
